package jdbchomework;

import java.sql.*;
import java.io.*;

public class SqlSelect {

	public static void main(String[] args) {
		if (args.length != 1) {
			System.out.println("用法：java ");
			return;
		}
		Connection con = null;
		PreparedStatement ps = null;
		Blob blob = null; // 这个blob是一个借口
		String fileName = args[0];
		ResultSet rs = null;
		int id = 1;
		try {

			String sql = "insert into mini values(?,?,empty_blob())"; // 调用这个empyt_blob方法，oracle就会给你造一个空的(bushi
			// null)blob对象。
			ps = con.prepareStatement(sql);
			ps.setInt(1, id);
			ps.setString(2, fileName);
			ps.executeUpdate();
			// 2.将空的blob对象对过来，
			sql = "select FILE_CONTENT from mini where ID=?";
			JdbcUtil.close(null, ps, null);
			ps = con.prepareStatement(sql);
			ps.setInt(1, id);
			rs = ps.executeQuery();	//查询
			if (rs.next()) {
				blob = rs.getBlob(1);
			}
			InputStream in = new FileInputStream(fileName);
			OutputStream out = blob.setBinaryStream(0); // 这个函数会返回一个输出流，括考里的0代表写文件的时候从第一个字节开始往里写
			byte[] content = new byte[in.available()]; // in.available()输入里的实际长度。
			in.read(content);// 将文件的大小一次写道文件里
			out.write(content);
			in.close();
			out.close();
			// 4.将blob对象更新到数据库
			sql = "update mini set FILE_CONTENT=? where id=? for update";
			JdbcUtil.close(rs, ps, null);
			ps = con.prepareStatement(sql);
			ps.setBlob(1, blob);
			ps.setInt(2, id);
			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
			try {
				con.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		} finally {
			JdbcUtil.close(null, ps, con);
		}
	}
}
